package modelo;

public class Multiplexador4Entradas extends Thread{
	private int entrada1[] = new int[16];
	private int entrada2[] = new int[16];
	private int entrada3[] = new int[16];
	private int entrada4[] = new int[16];
	private int saida[] = new int[16];
	private int primeira=0;
	private int linhaDeControle[] = new int[2];
	private SMailbox canalEntrada1 = new SMailbox();
	private SMailbox canalEntrada2 = new SMailbox();
	private SMailbox canalEntrada3 = new SMailbox();
	private SMailbox canalEntrada4 = new SMailbox();
	private SMailbox canalSaida = new SMailbox();
	private SMailbox canalControle = new SMailbox();
	private int quantidadeDeMsgAEnviar;
	
	public Multiplexador4Entradas(SMailbox canalEntrada1, SMailbox canalEntrada2, SMailbox canalEntrada3, SMailbox canalEntrada4, SMailbox canalSaida, SMailbox canalControle, int quantSaida){
		this.canalEntrada1 = canalEntrada1;
		this.canalEntrada2 = canalEntrada2;
		this.canalEntrada3 = canalEntrada3;
		this.canalEntrada4 = canalEntrada4;
		this.canalSaida = canalSaida;
		this.canalControle = canalControle;
		this.quantidadeDeMsgAEnviar = quantSaida;
	}
	
	public void setEntrada1(int entrada1[]) {
		this.entrada1 = entrada1;
	}
	public void setEntrada2(int entrada2[]) {
		this.entrada2 = entrada2;
	}
	public void setEntrada3(int entrada3[]) {
		this.entrada3 = entrada3;
	}
	public void setEntrada4(int entrada4[]) {
		this.entrada4 = entrada4;
	}
	public int[] getSaida() {
		return saida;
	}
	public void setLinhaDeControle(int linhaDeControle[]) {
		this.linhaDeControle = linhaDeControle;
	}
	
	public void atualizacao(){
		if(linhaDeControle[0]==0){
			if(linhaDeControle[1]==0){	//caso seja 00
				saida=entrada1;
			}
			else{							//caso seja 01
				saida=entrada2;
			}
		}
		else{
			if(linhaDeControle[1]==0){	//caso seja 10
				saida=entrada3;
			}
			else{							//caso seja 11
				saida=entrada4;
			}
		}
	}
	public void run(){
		entrada1 = (int[]) canalEntrada1.receive();
		entrada2 = (int[]) canalEntrada2.receive();
		entrada3 = (int[]) canalEntrada3.receive();
		entrada4 = (int[]) canalEntrada4.receive();
		linhaDeControle = (int[]) canalControle.receive();
		atualizacao();
		for(int i=0; i<quantidadeDeMsgAEnviar;i++){
			canalSaida.send(saida);
		}
		primeira++;
    }
}
